package com.crm.service.callCenter;

import com.crm.model.entity.callCenter.CallForm;
import com.crm.model.qo.callCenter.CallFormQO;
import com.crm.model.qo.callCenter.CallMarkupQO;
import com.crm.model.vo.callCenter.*;

import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
import java.util.Map;

/**
 * 呼叫中心-呼叫表单
 *
 * @Author renshaorong
 * @Date 2021/4/1
 */
public interface CallFormDbService {


    /**
     * 呼叫表单列表（全部）
     *
     * @param callFormQO 查询条件
     * @param dateUnit   时间类型（全部/本周/本月）
     * @param order      排序字段 类型
     * @return
     * @Author renshaorong
     * @Date 2021/4/1
     */
    List<CallFormVO> selectAllCallFormList(CallFormQO callFormQO, Integer dateUnit, String order);

    /**
     * 呼叫表单列表（当前用户所在分公司）
     *
     * @param callFormQO 查询条件
     * @param dateUnit   时间类型（全部/本周/本月）
     * @param order      排序字段 类型
     * @return
     * @Author renshaorong
     * @Date 2021/4/1
     */
    List<CallFormVO> selectCallFormListByCompanyId(CallFormQO callFormQO, Integer dateUnit, String order);

    /**
     * 呼叫表单列表（当前用户）
     *
     * @param callFormQO 查询条件
     * @param dateUnit   时间类型（全部/本周/本月）
     * @param order      排序字段 类型
     * @return
     * @Author renshaorong
     * @Date 2021/4/1
     */
    List<CallFormVO> selectCallFormListByUserId(CallFormQO callFormQO, Integer dateUnit, String order);


    /**
     * 根据主键获取数据
     *
     * @param formId
     * @return
     */
    CallForm selectCallFormByFormId(String formId);


    /**
     * 呼叫详情列表（全部）
     *
     * @param callFormQO 查询条件
     * @param dateUnit   时间类型（全部/本周/本月）
     * @param order      排序字段 类型
     * @return
     */
    List<CallFormVO> selectAllCallDetailsList(CallFormQO callFormQO, Integer dateUnit, String order);

    /**
     * 呼叫详情列表（当前用户所在分公司）
     *
     * @param callFormQO 查询条件
     * @param dateUnit   时间类型（全部/本周/本月）
     * @param order      排序字段 类型
     * @return
     */
    List<CallFormVO> selectCallDetailsListByCompanyId(CallFormQO callFormQO, Integer dateUnit, String order);

    /**
     * 呼叫详情列表（当前用户）
     *
     * @param callFormQO 查询条件
     * @param dateUnit   时间类型（全部/本周/本月）
     * @param order      排序字段 类型
     * @return
     */
    List<CallFormVO> selectCallDetailsListByUserId(CallFormQO callFormQO, Integer dateUnit, String order);

    /**
     * 新增呼叫表单
     *
     * @param callForm
     * @return {@link {java.lang.Boolean}}
     * @Author pym
     * @Date 2021/4/15 9:18
     */
    Boolean insertCallForm(CallForm callForm);

    /**
     * 折线图（接听、未接听、接听总数三条折线）
     *
     * @param dateUnit
     * @param type      接听1、未接听2、接听总数3
     * @param accountId
     * @return
     * @Author renshaorong
     * @Date 2021/4/16
     */
    List<Integer> getPolyLineByAnswers(Integer dateUnit, Integer type, String accountId);

    /**
     * 饼状图（30s/60s/90s/大于90s）
     *
     * @param dateUnit
     * @param accountId
     * @return
     * @Author renshaorong
     * @Date 2021/4/16
     */
    List<Map> getMinutePieData(Integer dateUnit, String accountId);

    /**
     * 统计表（标签：1 意向电话 2 无意向电话 3 未标记电话 4 抽取标签电话 5 产生话术电话 6 恶意回复电话）
     *
     * @param dateUnit
     * @param accountId
     * @return
     * @Author renshaorong
     * @Date 2021/4/16
     */
    CallReportVO selectcallReportVOList(Integer dateUnit, String accountId,Integer line);

    /**
     * 获取时间列表
     *
     * @param dateUnit
     * @return
     * @Author renshaorong
     * @Date 2021/4/16
     */
    List<String> getTimeList(Integer dateUnit);


    /**
     * @Description: 修改表单标签
     * @Author: yuanyunfeng
     * @Date: 2021/4/16 11:23
     * @Param:
     * @Return:
     */
    Boolean updateLabel(String formId, Integer label);


    /**
     * @Description: 呼叫通话次数统计
     * @Param: [accountId, startTm, endTm, delStatus]
     * @Return: CallStatisticsVO
     * @Author: lixq-f
     * @Date: 2021/4/28
     **/
    CallStatisticsVO selectCallStatistics(String accountId, Date startTm, Date endTm);


    /**
     * @Description: 呼叫平均值
     * @Param: [companyId, startTm, endTm]
     * @Return: java.util.List<com.crm.model.vo.callCenter.CallVO>
     * @Author: lixq-f
     * @Date: 2021/4/28
    **/
    List<CallVO<BigDecimal>> selectCallAverageTimesByDay(String companyId, Date startTm, Date endTm);


    /**
     * @Description: 呼叫平均值
     * @Param: [companyId, startTm, endTm]
     * @Return: java.util.List<com.crm.model.vo.callCenter.CallVO>
     * @Author: lixq-f
     * @Date: 2021/4/28
    **/
    List<CallVO<BigDecimal>> selectCallAverageTimesByMonth(String companyId, Date startTm, Date endTm);



    /**
     * 获取员工呼叫次数-按天
     * @param accountId
     * @param startTm
     * @param endTm
     * @return
     */
    List<CallVO<Long>> selectEmpCallTimesByDay(String accountId, Date startTm, Date endTm);


    /**
     * 获取员工呼叫次数-按月
     * @param accountId
     * @param startTm
     * @param endTm
     * @return
     */
    List<CallVO<Long>> selectEmpCallTimesByMonth(String accountId, Date startTm, Date endTm);


    
    /**
     * @Description: 通话时长排名统计
     * @Param: [accountId, companyId, startTm, endTm]
     * @Return: com.crm.model.vo.callCenter.CallDurationVO
     * @Author: lixq-f
     * @Date: 2021/4/29
    **/
    CallDurationVO selectCallDurationStatistics(String accountId,String companyId, Date startTm, Date endTm);



    /**
     * @Description: 通话时长排名
     * @Param: [accountId, companyId, startTm, endTm]
     * @Return: com.crm.model.vo.callCenter.CallDurationVO
     * @Author: lixq-f
     * @Date: 2021/4/29
     **/
    Integer selectge90SecendsRank(String accountId, String companyId, Date startTm, Date endTm);


    /**
     * @Description: 通话时长排名
     * @Param: [accountId, companyId, startTm, endTm]
     * @Return: com.crm.model.vo.callCenter.CallDurationVO
     * @Author: lixq-f
     * @Date: 2021/4/29
     **/
    Integer selectge60lt90SecendsRank(String accountId, String companyId, Date startTm, Date endTm);


    /**
     * @Description: 通话时长排名
     * @Param: [accountId, companyId, startTm, endTm]
     * @Return: com.crm.model.vo.callCenter.CallDurationVO
     * @Author: lixq-f
     * @Date: 2021/4/29
     **/
    Integer selectge30lt60SecendsRank(String accountId, String companyId, Date startTm, Date endTm);


    /**
     * @Description: 通话时长排名
     * @Param: [accountId, companyId, startTm, endTm]
     * @Return: com.crm.model.vo.callCenter.CallDurationVO
     * @Author: lixq-f
     * @Date: 2021/4/29
     **/
    Integer selectlt30SecendsRank(String accountId, String companyId, Date startTm, Date endTm);


    /**
     * @Description: 呼叫表单标记
     * @Param: [markupQO]
     * @Return: boolean
     * @Author: lixq-f
     * @Date: 2021/5/28
     **/
    boolean callMarkup(CallMarkupQO markupQO);



    /**
     * @Description: 修改呼叫表单联系人
     * @Param: [callFormQO]
     * @Return: boolean
     * @Author: lixq-f
     * @Date: 2021/5/31
     **/
    boolean updateContact(CallFormQO callFormQO);





}
